今天在写代码的时候遇到一种代码,在处理function的参数arguments的时候,错误的把看成一个Array处理了,尝试着去调用Array对应的原型对象的slice属性,结果报undifined错误,可见arguments并非Array的孩子。怀着这个疑问,查看了arguments的constructor,发现arguments的constructor竟然是Object.


那么如果我们需要对arguments进行slice,解决方式有很多,原理都是讲arguments转化成数组就解决了,但是问题是,这样的描述,用什么样的代码写最为优美。选择call()方法是比较合适的,call(obj,[方法参数])方法使用来描述用别的对象来替代当前对象且调用对应的方法,例如,

emptyArray = [], slice = emptyArray.slice
            alert(arguments.constructor)
            alert(slice.call(arguments,1));//slice是emptyArray对象的,这里相当于把emptyArray替换成arguments来调用slice。

遍历出数组中的所有元素,并对元素进行处理

var args = [1,2,3];
args.forEach(function(arg){alert(arg)})

|| 和 &&

alert(1||2)//1
alert(""||2)//2
/*
左边||右边 ,表示不是选左边就是选右边,左边没有(false),那么留下来的就是右边,如果左边有了(true)留下来的就是左边。[选了右边,就把||之前的一起擦掉,选了左边就把右边擦掉]
*/
alert(1&&2);//2
alert(""&&2);//""
/*
 与||正好相反
*/

serendipity
106 声望0 粉丝

REST